const path = require('path');

//vue文件错误记得一定加上这句，包括下面plugin的调用。
const VueLoaderPlugin = require('vue-loader/lib/plugin');
// const webpack = require('webpack');//启用热更新第二步
//这个配置文件，起始就是一个JS文件，通过Node中的模块操作，向外暴露了一个配置对象。
// const webpack = require('webpack');

//导入生成html页面的插件
//只要是插件，都要放到html-webpack-plugin中去。
var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    //举一反四，在配置文件中，需要手动指定入口和出口。
    entry:path.join(__dirname,'./src/main.js'),
    output:{
        path:path.join(__dirname,'./dist'),
        filename:'bundle.js'
    },
    module:{
        //这个节点用于配置所有的第三方模块加载器
        rules:[//所有第三方模块的匹配规则    
            {test:/\.vue$/,loader:'vue-loader'},   
            {test:/\.css$/,use: ["vue-style-loader", "css-loader"]},//配置处理.css文件的第三方loader规则
            {test:/\.less$/,use:['style-loader','css-loader','less-loader']},//配置处理.less文件的第三方loader规则
            // {test:/\.scss$/,use:['style-loader','css-loader','sass-loader']},//配置处理.scss文件的第三方loader规则
            {test:/\.(jpg|png|gif|bmp|jpeg)$/,use:'url-loader?limit=151752&name=[name].[ext]'},//处理图片路径的loader
            //limit给定的值是图片的大小，单位是byte，如果我们引用的图片，大于或等于给定的limit值，则不会被转为base64位。
            //如果小于则会被转为base64的字符串，很长的 [name]=文件名 [ext].文件后缀名  [hash:8]在文件前加入8为哈希值，可以防止重复
            {test:/\.(ttf|eot|svg|woff|woff2)$/,use:'url-loader'},//处理 字体文件
            {test:/\.js$/,loader:'babel-loader',exclude:/node_modules/}
        ],
       
    },
    plugins:[//配置插件的节点
        // new webpack.HotModuleReplacementPlugin(),//new一个热更新的模块对象，这是启用热更新的第三步
        new VueLoaderPlugin(),
        new htmlWebpackPlugin({//创建一个在内存中生成HTML页面的插件
            template:path.join(__dirname,'./src/index.html'),//指定模板页面,将来会根据指定的页面路径，去生成内存中的页面。
            filename:'index.html'
        })
    ],
    resolve:{//设置vue被导入时候的包的路径
        alias:{
            "vue$":"vue/dist/vue.js"
        }
    }
    // derServer:{
    //     //这是配置dev-server命令参数的第二种形式，相对来说，这种方式麻烦一些
    //     open:true,//自动打开浏览器
    //     port:3000,//设置启动运行时的默认端口
    //     contentBase:'src',//设置托管时的根目录
    //     hot:true//启用热更新的第一步
    // },
}